JWS 跟 JWE 一樣也可以自己包一個header,但是這篇文章我想介紹的是 signature 。先附上程式碼
let signPrivateKey = Curve25519.Signing.PrivateKey()
let payload = "Hello world".data(using: .utf8)!
let header = DefaultJWSHeaderImpl(algorithm: .EdDSA,
keyID: "1",
type: "JWS",
contentType: "application/json")
// 方式一
let jwsOrigin = try! JWS(payload: payload,
protectedHeader: header,
key: signPrivateKey)
// 方式二
let jws = try! JWS(protectedHeader: header,
data: payload,
signature: jwsOrigin.signature)
let jwsString = jws.compactSerialization
let isVerify = try! JWS.verify(jwsString: jwsString,
payload: payload,
key: signPrivateKey.publicKey)
print(isVerify)
這是一個完整的 JWS 創建過程。提供payload、保護頭部和簽名私鑰。初始化器會自動為你生成簽名。
這是一個已有簽名的 JWS 對象的構造方法。你需要自己提供已經計算好的簽名。適用於當你已經有了簽名,只是想構造一個 JWS 對象的情況。
主要區別在於:第一種方式會自動為你生成簽名,而第二種方式需要你自己提供簽名。第一種更適合創建新的 JWS,第二種則適合重構已有的 JWS 數據。